package com.bi.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bi.dto.WideTableQueryDTO;
import com.bi.entity.WideTable;
import com.bi.vo.WideTableVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 数据宽表Mapper接口
 * 
 * @author BI Platform Team
 * @since 1.0.0
 */
@Mapper
public interface WideTableMapper extends BaseMapper<WideTable> {

    /**
     * 分页查询数据宽表
     * 
     * @param page 分页参数
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    IPage<WideTableVO> selectWideTablePage(Page<WideTableVO> page, @Param("query") WideTableQueryDTO queryDTO);

    /**
     * 根据ID查询数据宽表详情
     * 
     * @param id 宽表ID
     * @return 宽表详情
     */
    WideTableVO selectWideTableById(@Param("id") Long id);

    /**
     * 查询用户可访问的数据宽表列表
     * 
     * @param creator 创建人
     * @return 宽表列表
     */
    List<WideTableVO> selectAccessibleWideTableList(@Param("creator") String creator);

    /**
     * 根据名称查询数据宽表
     * 
     * @param name 宽表名称
     * @return 宽表信息
     */
    WideTable selectByName(@Param("name") String name);

    /**
     * 根据索引名称查询数据宽表
     * 
     * @param esIndexName Elasticsearch索引名称
     * @return 宽表信息
     */
    WideTable selectByEsIndexName(@Param("esIndexName") String esIndexName);

    /**
     * 更新数据宽表状态
     * 
     * @param id 宽表ID
     * @param status 状态
     * @return 更新行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") WideTable.WideTableStatus status);

    /**
     * 统计数据宽表数量
     * 
     * @param creator 创建人
     * @param type 宽表类型
     * @return 数量
     */
    long countByCreatorAndType(@Param("creator") String creator, @Param("type") WideTable.WideTableType type);
}